#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
int dx[5]={0,1,0,-1,0};
int dy[5]={0,0,1,0,-1};
char g[10][10];
char backup[10][10];
void turn(int x,int y)
{
	for(int i=0;i<5;i++)
	{
		int xx=x+dx[i];
		int yy=y+dy[i];
		if(xx>=0 && xx<5 && yy>=0 && yy<5)
		{
			g[xx][yy]^=1;
		}
	}
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int ans=10;
		
		for(int i=0;i<5;i++)
		{
			cin>>g[i];
		}
		for(int op=0;op<32;op++)
		{
			int step=0; 
			memcpy(backup,g,sizeof(g));
			for(int i=0;i<5;i++)
			{
				if(op>>i &1)
				{
					step++;
					turn(0,i);
				}
			}
			for(int i=0;i<4;i++)
			{
				for(int j=0;j<5;j++)
				{
					if(g[i][j]=='0')
					{
						step++;
						turn(i+1,j);
					}
				}
			}
			if(step<7)
			{
			int f=1;
			for(int i=0;i<5;i++)
			{
				if(g[4][i]=='0')
				{
					f=0;
					break;
				}
			}
			if(f)
			{
				ans=min(ans,step);
			}
			}
			memcpy(g,backup,sizeof(backup));
		}
		if(ans<=6)
		{
			cout<<ans<<endl;
		}
		else
		{
			cout<<-1<<endl;
		}
	}

	return 0;
}

